#include "database.h"

//执行数据库操作的SQL语句
int execSql(sqlite3 *db, char *pSql)
{
     // sqlite3_exec函数用来执行SQL语句
     // 参数
     // 1. 数据库的指针
     // 2. SQL语句
     // 3. 函数指针，当SQL执行完成后会调用该函数，一般写成0
     // 4. 第三个参数指定的函数的参数，一般写成0
     // 5. 错误信息
     char *msg = NULL;
     sqlite3_exec(db, pSql, 0, 0, &msg);
     // 如果msg不为空，说明有错误信息
     if (msg != NULL)
     {
          printf("执行SQL语句失败 %s 错误的原因是：%s\n",pSql, msg);
          return -1;
     }
     return 1;
}

//执行查询的SQL语句
int querySql(sqlite3 *db, char *pSql , QUREY_RST * pQR)
{
     // sqlite3_get_table获取数据库表格的内容，通常用来执行数据库查询SQL语句
     // 参数
     // 1. 数据库的指针
     // 2. 要执行的SQL查询语句
     // 3. 查询的结果
     // 4. 查询结果的行数
     // 5. 查询结果的列数
     // 6. 错误信息

     char *msg = NULL;
     int data = sqlite3_get_table(db, pSql, &pQR->pzResult, &pQR->row, &pQR->col, &msg);

     if (msg != NULL)
     {
          printf("查询数据库失败，SQL语句是：%s 原因是：%s\n",pSql, msg);
          return -1;
     }
     else
     {
          return 1;
          // printf("row = %d col = %d result = %s\n", row, col, pzResult[1 + 4]);

          // for (size_t i = 0; i < row * col; i++)
          // {
          //      // 打印查询的结果，+4是为了跳过结果的表头
          //      printf("%s  ", pzResult[i + 4]);
          // }
          // printf("\n");
     }         
}

sqlite3 * openSqlite3(char * pName)
{
     sqlite3 *db = NULL; // 定义一个sqlite3的数据库指针
     int data = -1;

     // 打开指定的数据库文件，如果不存在将创建一个同名的数据库文件
     // 打开或者创建一个数据库，名字叫test.db，并且把数据用指针db保存
     data = sqlite3_open(pName, &db);
     if (data < 0)
     {
          printf("create testsqlite failure:%s\n", sqlite3_errmsg(db)); // 创建失败
     }
     return db;
}

void closeDB(sqlite3 * pDB)
{
     sqlite3_close(pDB);
}


// int main(int argc, char **argv)
// {
     // // 创建一个名为persons的表，有id , name , birth_data , phone四列，其中电话有一个叫做UNIQUE的属性，该属性是用来设置电话是唯一的不能有重复的意思
     // char szSQL[] = "CREATE TABLE persons (\
     //      id INT NOT NULL AUTO_INCREMENT,\
     //      name VARCHAR(50) NOT NULL,\
     //      birth_date DATE,\
     //      phone VARCHAR(15) NOT NULL UNIQUE);";

     // // sqlite3_exec函数用来执行SQL语句
     // // 参数
     // // 1. 数据库的指针
     // // 2. SQL语句
     // // 3. 函数指针，当SQL执行完成后会调用该函数，一般写成0
     // // 4. 第三个参数指定的函数的参数，一般写成0
     // // 5. 错误信息
     // char *msg = NULL;
     // sqlite3_exec(db, szSQL, 0, 0, &msg);
     // // 如果msg不为空，说明有错误信息
     // if (msg != NULL)
     // {
     //      printf("创建数据表失败：%s\n", msg);
     // }
     // else
     // {
     //      printf("创建数据表成功\n");
     // }

     // char name[128];
     // scanf("%s",name);

     // char szSql[256] = "UPDATE persons SET id = 2 WHERE name = 'zhangsan';"; //更新
     // sprintf(szSql,"INSERT INTO persons (id, name, birth_date, phone)\ //插入
     //      VALUES (1, '%s', '1990-07-15', '0711-020362')",name);
     // char szSql[256] = "DELETE FROM persons WHERE name = 'zhangsan';";
     // char *msg = NULL;
     // sqlite3_exec(db, szSql, 0, 0, &msg);
     // // 如果msg不为空，说明有错误信息
     // if (msg != NULL)
     // {
     //      printf("更新数据失败：%s\n", msg);
     // }
     // else
     // {
     //      printf("更新数据成功\n");
     // }


//      sqlite3_close(db);
// }